#ifndef PION_h
#define PION_h

#include <stdlib.h>
#include <stdio.h>

#include "porte-monnaie.h"
#include "plateau.h"
#include "stockcartetransaction.h"
#include "listecartecourrier.h"
#include "listecartetransaction.h"


/**
@brief Cette fonction définit le module Pion
@author MARLIER Molly & GUESDON Marine
@version 1.0
@date 2013/03/26
*/

typedef struct {
unsigned int couleur;
Porte_Monnaie monnaie ;
unsigned int position ;
StockCarteTransaction stockT;
unsigned int nb_tours_effectue;
} Pion;

/**
@brief InitialiserPion permet d'initialiser le pion càd de choisir sa couleur, d'initialiser son porte-monnaie et de la placer sur la case départ.
@param [in] p: pointeur sur Pion , [in,out] couleurchoisi: unsigned char, [in,out] cadeaudepart: int
@return none
*/
void InitialiserPion(Pion *p, const unsigned int couleurchoisie, const int cadeaudepart);

/**
@brief DeplacerPion permet de déplacer le pion du nombre de case donnée par le dé et s'arrête si on est sur la case jour de paye.
@param [in] p: pointeur sur Pion , [in] numerode: unsigned char, [in] pp: pointeur sur Plateau
@return none
*/
void DeplacerPion(Pion *p, unsigned int numero_de, Plateau* pp);

/**
@brief RetournerCaseDepart perme de retourneer à la case départ lorsqu'on est arrivée à la fin du mois
@param [in] p: pointeur sur Pion, [in] pp: pointeur sur Plateau
@return none
*/
void RetournerCaseDepart(Pion *p, Plateau *pp);

/**
@brief PiocherCarte permet de piocher la première carte du paquet transaction
@param [in] l: pointeur sur liste, [in] p: Pion, [in, out] nombrecartesapiocher: int
@return Carte
*/
void PiocherCarteTransaction (ListeTransaction *l, Pion *p, const int nombrecartesapiocher);

/**
@brief RemettreCartes permet de remettre toutes les cartes transaction accumulés par le joueur pendant le mois
@param [in] l: pointeur sur liste
@return Carte
*/
void RemettreCartesTransactions (ListeTransaction *l, Pion *p);


#endif
